package MBMantenedorTienda;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

//import EJBCrudProductos.EjbArrProdLocal;
import EJBTienda.EjbCarritoRemote;
import Modelo.ProdCarrito;
import Modelo.Producto;

/**
 * doc information expected for MBTienda type.
 * 
 * @author Franco Camilo Gonzalez Chaparro.
 */
@SessionScoped
@ManagedBean
public class MBTienda implements Serializable {

    /**
     * variable que pone el sistema por defaul al implementar Serializable.
     */
    private static final long serialVersionUID = 1L;
    @EJB(name = "EJBRemote", mappedName = "EJBRemote")
    private EjbCarritoRemote ejbCarrito;
    private String message = "Carrito Vacio";
    private int cont = 0;
    private List<Producto> arrProdDisp;
    private ArrayList<ProdCarrito> arrProdCarrito =
            new ArrayList<ProdCarrito>();

    public MBTienda() {
    }

    @PostConstruct
    public void init() {
        System.out.println("inicio  tienda");
        arrProdDisp = ejbCarrito.obtenerProdDisp();
        System.out.println("FIN inicio  tienda");
    }

    // ****************************************************************Metodos
    // de la Tienda
    public void agregar(Producto p) {
        boolean haystock = true;
        if (!existe(p)) {
            arrProdCarrito = ejbCarrito.agregar(p, arrProdCarrito);
        } else {
            haystock = agregarProdRepetido(p.getId());
        }
        cont = 0;
        for (ProdCarrito prod : arrProdCarrito) {
            cont += prod.getCant();
        }

        if (haystock == false) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(
                    "No hay mas Stock para el Producto: " + p.getNombre() + "",
                    "Stock: " + p.getStock()));
        }
        message = new String("El carrito tiene " + cont + " Producto(s)");
    }

    public boolean existe(Producto p) {
        boolean existe = false;
        for (ProdCarrito prod : arrProdCarrito) {
            if (prod.getId() == p.getId()) {
                existe = true;
            }
        }
        return existe;

    }

    public boolean agregarProdRepetido(int id) {
        boolean haystock = false;
        for (ProdCarrito prod : arrProdCarrito) {
            if (prod.getId() == id) {
                if (prod.getCant() < prod.getStock()) {
                    haystock = true;
                    prod.setCant(prod.getCant() + 1);
                }
            }
        }
        init();
        return haystock;
    }

    public String irAdetalleCarrito() {
        return "Carrito";
    }

    // ****************************************************************Metodos
    // del Carrito
    public void sumarCant(int id) {
        int sw = 0;
        String nombre = "";
        int stock = 0;
        for (ProdCarrito prod : arrProdCarrito) {
            if (prod.getId() == id) {
                if (prod.getCant() < prod.getStock()) {
                    sw = 1;
                    prod.setCant(prod.getCant() + 1);
                } else {
                    nombre = prod.getNombre();
                    stock = prod.getStock();
                }
            }
        }
        if (sw == 0) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(
                    "No hay mas Stock para el Producto: " + nombre + "",
                    "Stock: " + stock));
        }
        init();
    }

    public void restarCant(int id) {
        for (ProdCarrito prod : arrProdCarrito) {
            if (prod.getId() == id) {
                if (prod.getCant() > 1) {
                    prod.setCant(prod.getCant() - 1);
                }
            }
        }
        init();
    }

    public void borrarDelCarrito(int id) {
        arrProdCarrito = ejbCarrito.eliminarProd(id, arrProdCarrito);
    }

    public int totalCarrito() {
        int total = 0;
        for (ProdCarrito prod : arrProdCarrito) {
            total += prod.getCant() * prod.getPrecio();
        }
        return total;
    }

    public String realizarCompra() {
        ejbCarrito.realizarVenta(arrProdCarrito);
        arrProdCarrito = new ArrayList<ProdCarrito>();
        message = "Carrito Vacio";
        init();
        return ("Tienda");
    }

    // ****************************************************************Getter's
    // & Setter's
    public List<Producto> getArrProdDisp() {
        return arrProdDisp;
    }

    public void setArrProdDisp(List<Producto> arrProdDisp) {
        this.arrProdDisp = arrProdDisp;
    }

    public ArrayList<ProdCarrito> getArrProdCarrito() {
        return arrProdCarrito;
    }

    public void setArrProdCarrito(ArrayList<ProdCarrito> arrProdCarrito) {
        this.arrProdCarrito = arrProdCarrito;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

}
